<?php

namespace app\demo\model;



/*class Member
{
    //创建受保护属性：数组
    protected $memberdata = array();
    //

    public  function __call($func,$arguments){

        list($type,$name) = explode("_",$func);

        if(!in_array($type,array('set','get'))||$name==''){
            return '';
        }

        $feature = get_called_class();

        switch ($type){
            case 'set':
                self::$memberdata[$feature][$name] = $arguments[0];
                break;
            case 'get' :
                isset(self::$memberdata[$feature][$name])?self::$memberdata[$feature][$name]:'';
                break;
            default:
        }

    }


}*/


//创建父类:Member
class Member{

    //创建受保护属性:数组
    protected  static $memberdata = array();

    //当调用的方法不存在或权限不足时，会自动调用__call方法
    public function __call($func, $arguments){

        //explode():用'_'字符串分割为数组
        //list():将数组元素转为对应的独立变量:$type,$name
        list($type, $name) = explode('_', $func);

        //如何$type字符串不在数组'set'和'get'中任何一个
        //或者$name为空的话,则调用的方法名称不正确,直接返回'空';
        if(!in_array($type, array('set','get')) || $name==''){
            return '';
        }

        //获取调用当前方法的类名
        //即:当前方法静态绑定的类名: 如 User
        $feature = get_called_class();

        //判断$type值
        switch($type){
            //如果$type = 'set',则是给属性$memeberdata赋值
            case 'set':
                //将当前方法的参数数组的值$arguments[0]
                //赋给属性 $memberdata[$feature][$name]:注意是二维数组
                //当前方法只有一个值:$arguments[0]
                self::$memberdata[$feature][$name] = $arguments[0];
                break;

            //如果$type = 'get',则是获取属性$memeberdata的值
            case 'get':

                //如果 self::$memberdata[$feature][$name]存在则返回该值,否则返回:空
                return isset(self::$memberdata[$feature][$name])? self::$memberdata[$feature][$name] : '';
                break;
            default:
        }
    }


    //当调用的方法不存在或权限不足时，会自动调用__call方法
    public static function __callStatic($func, $arguments){

        //explode():用'_'字符串分割为数组
        //list():将数组元素转为对应的独立变量:$type,$name
        list($type, $name) = explode('_', $func);

        //如何$type字符串不在数组'set'和'get'中任何一个
        //或者$name为空的话,则调用的方法名称不正确,直接返回'空';
        if(!in_array($type, array('set','get')) || $name==''){
            return '';
        }

        //获取调用当前方法的类名
        //即:当前方法静态绑定的类名: 如 User
        $feature = get_called_class();

        //判断$type值
        switch($type){
            //如果$type = 'set',则是给属性$memeberdata赋值
            case 'set':
                //将当前方法的参数数组的值$arguments[0]
                //赋给属性 $memberdata[$feature][$name]:注意是二维数组
                //当前方法只有一个值:$arguments[0]
                self::$memberdata[$feature][$name] = $arguments[0];
                break;

            //如果$type = 'get',则是获取属性$memeberdata的值
            case 'get':

                //如果 self::$memberdata[$feature][$name]存在则返回该值,否则返回:空
                return isset(self::$memberdata[$feature][$name])? self::$memberdata[$feature][$name] : '';
                break;
            default:
        }
    }



}

